perm filename IMPSTA.MID[NET,MRC]13 blob
sn#525496 filedate 1980-07-27 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00012 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN IMP RFCS RFCR CLSS CLSR DEVCHR DEVIOS INPW LNK0W BLOKW ALLW BAL MAL NHBA NHMA HBA HMA BIIL MIIL
C00006 00003 DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD FRSPTY FFLNK IMPDIE IMPDEA NMESIN NMESOU IMPDWY IMPTDN IMPTUP LNKTAB LNKDDB IMPLS IMPFS IMPBS IMPSTB PRJPRG JOBNAM PTYJOB TTYTAB
C00009 00004 IMPSTA
C00011 00005 SNARF
C00014 00006 GETNET HDNODM IMPDDN
C00017 00007 NOTIDI NXTLNK HSTSRH HSTSR0 HSTOUT DOLINK DOLNKX FORSKT
C00021 00008 DPYLS NOTCLS STADUN
C00023 00009 NODDB
C00025 00010 PTYLUP PTYFND GETLOC NTELSR NXTPTY MSGEND CLREOF
C00028 00011 NODDDM DOIII DODM DELAY NODLAY DELAY1
C00030 00012 TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT SIXOU1 TXTSTR ...LIT
C00032 ENDMK
C⊗;
;PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN IMP RFCS RFCR CLSS CLSR DEVCHR DEVIOS INPW LNK0W BLOKW ALLW BAL MAL NHBA NHMA HBA HMA BIIL MIIL
TITLE IMPSTAT
SUBTTL Definitions
; Mark Crispin, SU-AI, July 1980
X=1 ? Y=2 ? Z=3 ? L=4 ? I=5 ? N=6 ? DDB=7 ? J=10 ? T=11 ? A=12 ? B=13 ? C=14 ? P=17
PDLLEN==50. ; stack size
; GETLIN bits
IIILIN==400000,, ; terminal is a III
DMLIN== 040000,, ; terminal is a DM
DDDLIN==020000,, ; terminal is a DD
; APRENB bits
ILM== 020000 ; MPV occured
; Data Risc command word
DEFINE CW ?C1,B1,C2,B2,C3,B3
<<B1←28.>\<B2←20.>\<B3←12.>\<C1←9.>\<C2←6.>\<C3←3>\4>
TERMIN
; Data Risc command names
EXCT== 0 ; execute
FNCN== 1 ; function, usual value bytes
ALPHBG==6 ? ALPHA==46
CHNL== 2 ; channel select
COLM== 3 ; column select
HILIN== 4 ; set high 5 bits of line address
LOLIN== 5 ; set low 4 bits of line address
IMP== 400 ; IMP interface device code
; IMP status bits
RFCS== 200000,, ; RFC sent
RFCR== 100000,, ; RFC received
CLSS== 040000,, ; CLS sent
CLSR== 020000,, ; CLS received
; IMP DDB stuff
DEVCHR==1 ; characteristics
DEVIOS==2 ; I/O status
INPW== 200000,, ; input wait
LNK0W==100000,, ; control link RFNM wait
BLOKW==040000,, ; RFNM wait
ALLW== 020000,, ; allocation wait
BAL== 14 ; bit allocation
MAL== 15 ; message allocation
NHBA== 16 ; nominal bit allocation
NHMA== 17 ; nominal message allocation
HBA== 22 ; remote bit allocation
HMA== 23 ; remote message allocation
BIIL== 24 ; bits in input list
MIIL== 25 ; messages in input list
;DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD FRSPTY FFLNK IMPDIE IMPDEA NMESIN NMESOU IMPDWY IMPTDN IMPTUP LNKTAB LNKDDB IMPLS IMPFS IMPBS IMPSTB PRJPRG JOBNAM PTYJOB TTYTAB
SUBTTL Data area
DELAYP: BLOCK 1 ; -1 → don't delay
PDL: BLOCK PDLLEN ; stack
HSTADR: BLOCK 1 ; where host table begins
LINCNT: BLOCK 1 ; line count
HDABLK: BLOCK 13 ; terminal location block
HSIZE: BLOCK 1 ; horizontal size
SCREEN: BLOCK 1 ; display screen image pointer
; Display program stuff
COLPOS: CW COLM,2,HILIN,1,LOLIN,10 ; second column, second line
TXTOUT: CW FNCN,ALPHA,CHNL,0,FNCN,ALPHA ; text output
DPHEAD: 200000,, ; double field mode
0 ; size
0
0 ; address of low order line select for DD
; Monitor pointers
FRSPTY: 0 ; TTY # of first PTY
FFLNK: 0 ; first free link
IMPDIE: 0 ; NCP locked out
IMPDEA: 0 ; NCP down
NMESIN: 0 ; messages in
NMESOU: 0 ; messages out
IMPDWY: 0 ; why IMP going down
IMPTDN: 0 ; when IMP going down
IMPTUP: 0 ; when IMP coming back up (usual lie)
; IMP table pointers indexed by IMP index up by 1, so RH is addr-1
LNKTAB: (I) ; host-link number
LNKDDB: (I) ; address of DDB
IMPLS: (I) ; local socket number
IMPFS: (I) ; foreign socket number
IMPBS: (I) ; byte size
IMPSTB: (I) ; link status
; Pointers indexed by job number
PRJPRG: (J) ; PPN
JOBNAM: (J) ; program name
; Pointers indexed by PTY number
PTYJOB: (T) ; PTY mother
; Pointers indexed by TTY number
TTYTAB: (T) ; TTY DDB pointer
;IMPSTA
SUBTTL Start of program
IMPSTA: JFCL
RESET
MOVE P,[PDL(-PDLLEN)]
; Map in host table
OPEN [17 ? 'DSK,, ? 0] ; get a disk channel
JRST 4,.-1
DMOVE [SIXBIT/HOSTS1BIN/] ? DMOVE 2,[0 ? 'NETMRC]
LOOKUP ; find file HOSTS1.BIN[NET,MRC]
JRST 4,.-1
MOVE Y,JOBFF
MOVS Z ? MOVN ? ADDB JOBFF ; get address of highest addr we need
HRRM DPHEAD
MOVEM DPHEAD+3
AOS DPHEAD+3
CORE ; get more core from system maybe
JRST 4,.-1
HRRZ DPHEAD
ADDI 2
MOVEM SCREEN
MOVE Z ? HRRI -1(Y) ; compute IOWD to read host table in
SETZ X,
INPUT
MOVE (Y) ; get first word of host table
CAME ['HOSTS1]
JRST 4,.-1
MOVEM Y,HSTADR ; remember where host table begins
RELEAS
; Make sure we never lose with MPV
MOVEI [ MOVE JOBREL
ADDI 2000 ; another K of core, please
CORE
JRST 4,IMPSTA
LOCK
JRST GETNET] ; restart status
MOVEM JOBAPR
MOVEI ILM
APRENB
LOCK ; ensure fast response
; (continued on next page)
;SNARF
SUBTTL Get initial monitor information
; Map the monitor in
SNARF: MOVE [100,,300←5+10]
GETHI
JRST 4,.-1
; Snarf up some monitor symbols
MOVEI [.RSQZ 0,TCONLN ? 0]
.SYML
JRST 4,.-1
ADDI 1
MOVEM FRSPTY
OPEN [0 ? 'IMP,, ? 0] ; need an IMP DDB to get a dump
JRST 4,.-1
MOVEI 5 ; magic dump of addresses
MTAPE
RELEAS
MOVEI 400000 ; high seg offset
IRPS SYM,,IMPDIE IMPDEA NMESIN NMESOU IMPTDN IMPTUP IMPDWY FFLNK
IFE .IRPCN&1,HLRM 1+<.IRPCN/2>,SYM
.ELSE HRRM 1+<.IRPCN/2>,SYM
ADDM SYM
TERMIN
MOVEI 377777 ; high seg offset for tables indexed-1
IRPS SYM,,LNKTAB LNKDDB IMPLS IMPFS IMPBS IMPSTB
IFE .IRPCN&1,HLRM 5+<.IRPCN/2>,SYM
.ELSE HRRM 5+<.IRPCN/2>,SYM
ADDM SYM
TERMIN
; Get symbols with low core pointers
MOVE 400211 ; PRJPRG
ADDI 400000
HRRM PRJPRG
MOVE 400225 ; JOBNAM
ADDI 400000
HRRM JOBNAM
MOVE 400270 ; PTYJOB
SUB FRSPTY
ADDI 400000 ; indexed by PTY number
HRRM PTYJOB
MOVE 400220 ; TTYTAB
ADDI 400000
HRRM TTYTAB
MOVE J,400226 ; JOB
MOVE J,400000(J)
MOVE L,400236 ; JBTLIN
ADDI L,400000(J)
MOVE L,(L)
CAMN L,[-1]
EXIT ; punt if detached
MOVEI L,400000(L)
ADD L,400302 ; LINTAB
MOVE L,(L)
; Fool around with the page printer
HRROI [015000,,HSIZE]
TTYSET
PPSEL 1
DPYPOS -452 ; near botton of screen
DPYSIZ 3002 ; 3 glitches, 2 lines/glitch
; (continued on next page)
;GETNET HDNODM IMPDDN
SUBTTL Initialize display, IMP going down
GETNET: SETZB @SCREEN
ADJSP @SCREEN
AOS
BLT @JOBREL
MOVSI X,440700
ADD X,SCREEN
SETZM LINCNT
TLNN (DMLIN)
JRST HDNODM
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
HDNODM: SKIPN A,@IMPDWY
JRST NOTIDI ; IMP isn't dying
JSP Y,TXTSTR
ASCIZ/ IMP going down at /
MOVE Y,@IMPTDN
IDIVI Y,60.*60. ; minutes
IDIVI Y,60. ; Y←hours, Z←minutes
CAIL Y,24.
SUBI Y,24.
PUSH P,Z
IDIVI Y,10. ; ah, the joys of open coding!
MOVEI "0(Y)
IDPB X
MOVEI "0(Z)
IDPB X
MOVEI B,":
IDPB B,X
POP P,Y
IDIVI Y,10.
MOVEI "0(Y)
IDPB X
MOVEI "0(Z)
IDPB X
JSP Y,TXTSTR
ASCIZ/ until /
MOVE Y,@IMPTUP
IDIVI Y,60.*60. ; minutes
IDIVI Y,60. ; Y←hours, Z←minutes
CAIL Y,24.
SUBI Y,24.
PUSH P,Z
IDIVI Y,10.
MOVEI "0(Y)
IDPB X
MOVEI "0(Z)
IDPB X
IDPB B,X
POP P,Y
IDIVI Y,10.
MOVEI "0(Y)
IDPB X
MOVEI "0(Z)
IDPB X
JSP Y,TXTSTR
ASCIZ/ for /
JUMPE A,[ JSP Y,TXTSTR
ASCIZ/panic restart/
JRST IMPDDN]
SOJE A,[JSP Y,TXTSTR
ASCIZ/scheduled hardware PM/
JRST IMPDDN]
SOJE A,[JSP Y,TXTSTR
ASCIZ/scheduled software reload/
JRST IMPDDN]
JSP Y,TXTSTR
ASCIZ/emergency restart/
IMPDDN: PUSHJ P,TERPRI
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
; (continued on next page)
;NOTIDI NXTLNK HSTSRH HSTSR0 HSTOUT DOLINK DOLNKX FORSKT
; Header and link stuff: Index, host, foreign socket
NOTIDI: SKIPE @IMPDIE
JRST [ JSP Y,TXTSTR
ASCIZ/ NCP locked out!/
PUSHJ P,TERPRI
JRST .+1]
SKIPE @IMPDEAD
JRST [ JSP Y,TXTSTR
ASCIZ/ NCP dead!/
PUSHJ P,TERPRI
JRST .+1]
SKIPN @FFLNK
JRST [ JSP Y,TXTSTR
ASCIZ/ Nobody is using the IMP!/
PUSHJ P,TERPRI
JRST MSGEND]
MOVEI I,1
JSP Y,TXTSTR
ASCIZ/Ix Host Link Foreign skt Lskt BS Stat Jb Usr Subsys Wait Allocs/
PUSHJ P,TERPRI
NXTLNK: MOVEI Y,-1(I)
MOVEI N,2
PUSHJ P,OCTOUT ; table index
MOVEI <" >
IDPB X
LDB [103000,,@LNKTAB]
JUMPE [ JSP Y,TXTSTR ; listening, sorry!
ASCIZ/ /
JRST FORSKT]
MOVE A,HSTADR
MOVE A,7(A) ; NUMPTR
ADD A,HSTADR ; address of NUMBERS table
MOVE B,(A) ; get # of entries
MOVE C,1(A) ; and entry size
ADDI A,2 ; point at first entry
HSTSRH: MOVE Y,(A)
CAILE Y,377 ; old or new style?
JRST [ LDB Z,[001000,,Y] ; new style, get host number
LSH Y,-9. ; put IMP number in IMP format place
DPB Z,[201000,,Y]
JRST HSTSR0]
LDB Z,[060300,,Y] ; old style, get host number
ANDI Y,77
DPB Z,[200200,,Y] ; store host number in IMP format
HSTSR0: CAME Y ; found host?
JRST [ ADDI A,(C) ; point at next entry
SOJG B,HSTSRH
LDB Y,[301000,,@LNKTAB] ; get host number
MOVEI N,1. ; needs to be changed if more than 9 hosts
PUSHJ P,DECOUT ; on an IMP ever happens
MOVEI <"/>
IDPB X
LDB Y,[102000,,@LNKTAB] ; get IMP number
MOVEI N,2. ; this needs to be changed if more than
PUSHJ P,DECOUT ; 99 IMPs ever happens
JSP Y,TXTSTR
ASCIZ/ /
SETZ Z,
JRST DOLNKX]
HRRZ Y,1(A) ; NUMNAM
ADD Y,HSTADR
MOVEI Z,14. ; assume all hosts stop at 14 characters
TLOA Y,440700
HSTOUT: IDPB X
ILDB Y
JUMPE DOLINK
SOJA Z,HSTOUT
DOLINK: MOVEI <" >
DOLNKX: IDPB X
SOJGE Z,DOLINK ; fill out with spaces as necessary
LDB Y,[001000,,@LNKTAB]
MOVEI N,3
PUSHJ P,OCTOUT ; link number
MOVEI <" >
IDPB X
FORSKT: MOVE Y,@IMPFS ; foreign socket number
CAMN Y,[-1]
JRST [ JSP Y,TXTSTR
ASCIZ/ listening/
JRST DPYLS]
MOVEI N,11.
PUSHJ P,OCTOUT
; (continued on next page)
;DPYLS NOTCLS STADUN
; Local socket, byte size, state
DPYLS: MOVEI <" >
IDPB X
MOVE Y,@IMPLS ; local socket number
MOVEI N,4
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
MOVE Y,@IMPBS ; byte size
MOVEI N,2
PUSHJ P,DECOUT
MOVE @IMPSTB
TLNN (CLSS\CLSR)
JRST NOTCLS
TLNN (CLSS)
JRST [ JSP Y,TXTSTR
ASCIZ/ CLSR/
JRST STADUN]
TLNN (CLSR)
JRST [ JSP Y,TXTSTR
ASCIZ/ CLSS/
JRST STADUN]
JSP Y,TXTSTR
ASCIZ/ CLSD/
JRST STADUN
NOTCLS: TLNN (RFCS\RFCR)
JRST [ JSP Y,TXTSTR
ASCIZ/ LISN/
JRST STADUN]
TLNN (RFCS)
JRST [ JSP Y,TXTSTR
ASCIZ/ RFCR/
JRST STADUN]
TLNN (RFCR)
JRST [ JSP Y,TXTSTR
ASCIZ/ RFCS/
JRST STADUN]
JSP Y,TXTSTR
ASCIZ/ OPEN/
; Start of DDB stuff
STADUN: SKIPN DDB,@LNKDDB
JRST NODDB ; no DDB for this guy
MOVEI <" >
IDPB X
MOVE J,400347 ; PJOBN
XOR J,[DDB,,600000]
LDB J,J
PUSHJ P,JOBOUT
MOVEI <" >
IDPB X
MOVE Y,200000+DEVIOS(DDB)
TLNE Y,(INPW)
MOVEI "I
IDPB X
MOVEI <" >
TLNE Y,(LNK0W)
MOVEI "C
IDPB X
MOVEI <" >
TLNE Y,(BLOKW)
MOVEI "R
IDPB X
MOVEI <" >
TLNE Y,(ALLW)
MOVEI "A
IDPB X
MOVEI <" >
IDPB X
; (continued on next page)
;NODDB
; Allocations
MOVE @IMPLS
TRNN 1 ; send or receive?
JRST [ MOVE Y,200000+HMA(DDB) ; receive; foreign message allocation
PUSHJ P,DECOUT
MOVEI "/
IDPB X
MOVE Y,200000+HBA(DDB)
PUSHJ P,DECOUT
MOVE Y,200000+MIIL(DDB) ; messages in input list
JUMPE Y,NODDB
MOVEI <" >
IDPB X
MOVEI "[
IDPB X
PUSHJ P,DECOUT
MOVEI "/
IDPB X
MOVE Y,200000+BIIL(DDB) ; bits in input list
PUSHJ P,DECOUT
MOVEI "]
IDPB X
JRST NODDB]
MOVE Y,200000+MAL(DDB) ; send socket; message allocation
PUSHJ P,DECOUT ; note N=-1 from last DECOUT call
MOVEI "/
IDPB X
MOVE Y,200000+BAL(DDB) ; bit allocation
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
NODDB: PUSHJ P,TERPRI
CAMGE I,@FFLNK
AOJA I,NXTLNK
; (continued on next page)
;PTYLUP PTYFND GETLOC NTELSR NXTPTY MSGEND CLREOF
SUBTTL PTY map
LDB T,[001100,,400221] ; number of PTY's
HRLOI T,-1(T)
EQV T,FRSPTY ; first PTY
SKIPN J,@PTYJOB
AOBJN T,.-1
JUMPE J,MSGEND
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/PTY CJ Usr Subsys SJ Usr Subsys Location/
PUSHJ P,TERPRI
JRST PTYFND
PTYLUP: SKIPN J,@PTYJOB
JRST NXTPTY
PTYFND: MOVEI N,3
PUSH P,J
MOVEI Y,(T)
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
PUSHJ P,JOBOUT
HRRZ J,@TTYTAB
ADD J,400347 ; PJOBN
HRRZS J ; physical address
PEEK J, ; TTY DDB's may be in upper 128K
MOVE 400347 ; PJOBN
HRRI J
LDB J,
JUMPE J,[ JSP Y,TXTSTR
ASCIZ/ /
JRST GETLOC]
MOVEI <" >
IDPB X
PUSHJ P,JOBOUT
MOVEI <" >
IDPB X
GETLOC: POP P,A ; try for TELSER's 137 convention
HRROI B,137
MOVEI C,B
MOVEI A
JOBRD
JRST NTELSR
JUMPE B,NTELSR
TLNE B,-1
JRST NTELSR
HRLI B,-13
MOVEI C,HDABLK
JOBRD
JRST NTELSR
MOVE HDABLK
CAME ['TERMID]
JRST NTELSR
SKIPA Y,[440700,,HDABLK+1]
IDPB X
ILDB Y
JUMPN .-2
NTELSR: PUSHJ P,TERPRI
NXTPTY: AOBJN T,PTYLUP
MSGEND: MOVEI <" >
IDPB X
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/IMP CONI=/
EIOTM
CONI IMP,Y
JRST 2,@[.+1] ; better than LIOTM
MOVEI N,6
PUSHJ P,OCTOUT
JSP Y,TXTSTR
ASCIZ/, input messages=/
MOVE Y,@NMESIN
PUSHJ P,DECOUT
JSP Y,TXTSTR
ASCIZ/, output messages=/
MOVE Y,@NMESOU
PUSHJ P,DECOUT
PUSHJ P,TERPRI
MOVE Z,HSIZE
TLNE L,(DDDLIN\DMLIN)
CLREOF: CAMG Z,LINCNT
JRST NODDDM ; III or printing
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
SOJA Z,CLREOF
; (continued on next page)
;NODDDM DOIII DODM DELAY NODLAY DELAY1
SUBTTL Display it!
NODDDM: TLNN X,700000 ; if at word boundry
ADDI X,1
SETZM 1(X) ; HALT to stop program
MOVEI X,(X)
MOVEI 2(X)
SUBI @DPHEAD
MOVEM DPHEAD+1 ; save display program length
AOS (X)
CAME X,SCREEN
SOJA X,.-2
; Now output the accumulated text
TLNN L,(DDDLIN\IIILIN\DMLIN)
JRST [ OUTSTR @SCREEN
OUTSTR [ASCIZ/
/]
JRST DELAY]
JUMPL L,DOIII
TLNE L,(DMLIN)
JRST [ SETZM @DPHEAD
MOVE X,[.BYTE 7 ? 177 ? ↑L ? 140 ? 142]; cursor at third line
JRST DODM]
MOVE TXTOUT
MOVEM @DPHEAD
SKIPA X,COLPOS
DOIII: MOVE X,[.BYTE 11.,11.,3,3,2,2,4 ? -777 ? 640 ? 2 ? 2 ? 1 ? 2 ? 6]
DODM: MOVEM X,@DPHEAD+3
UPGIOT 1,DPHEAD ; display the text
; Done, wait a while and go again
DELAY: SKIPE DELAYP
JRST NODLAY
MOVEI 20.
TLNE L,(DDDLIN\IIILIN)
MOVEI 1
TLNE L,(DMLIN)
MOVEI 5.
SLEEP
NODLAY: SNEAKS
JRST GETNET
ANDI 177
CAIN 175
JRST [INCHRW ? SETCMM DELAYP ? JRST GETNET] ; ALT toggles the delay flag
CAIN <" >
JRST [INCHRW ? INCHRW ? JRST GETNET] ; space holds us
CAIE ↑M
JRST DELAY1
INCHRW ; only eat CRLF's
INCHRW
DELAY1: HRROI [004000,,400\"N]
TTYSET
EXIT
;TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT SIXOU1 TXTSTR ...LIT
SUBTTL Random stuff
TERPRI: JSP Y,TXTSTR
ASCIZ/
/
AOS LINCNT
TLNN (DMLIN)
POPJ P,
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
POPJ P,
; Octal/decimal output of Y. If N > 0, pad with spaces so it fits in N digits
DECOUT: SKIPA Z,[10.]
OCTOUT: MOVEI Z,8.
HRRM Z,NUMOUT ; I don't want to fry another AC
NUMOUT: IDIVI Y,
ADDI Z,"0
PUSH P,Z
SOJLE N,NUMOU1
JUMPN Y,NUMOU2
MOVEI Z,<" >
IDPB Z,X
SOJG N,.-1
JRST NUMOU3
NUMOU1: SKIPE Y
NUMOU2: PUSHJ P,NUMOUT
NUMOU3: POP P,Y
IDPB Y,X
POPJ P,
; Job number/PPN/name output
JOBOUT: MOVEI N,2
MOVEI Y,(J)
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
HRLZ Y,@PRJPRG
MOVEI N,3
PUSHJ P,SIXOU1
MOVEI <" >
IDPB X
MOVE Y,@JOBNAM
; JRST SIXOUT
; Sixbit output routine
SIXOUT: MOVEI N,6
SIXOU1: SETZ Z,
ROTC Y,6
ADDI Z,"A-'A
IDPB Z,X
SOJG N,SIXOUT+1
POPJ P,
; Output text string, called with JSP
TXTSTR: HRLI Y,440700
ILDB Y
JUMPE 1(Y)
IDPB X
JRST TXTSTR+1
...LIT: CONSTA
END IMPSTAT